package fr.gfi.agraf.service.mapper;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import org.springframework.util.CollectionUtils;

import fr.gfi.agraf.persistence.entity.Composant;
import fr.gfi.agraf.persistence.entity.Droit;
import fr.gfi.agraf.persistence.entity.Profil;
import fr.gfi.agraf.vue.bean.ComposantDTO;

/**
 * @author Zakaria
 *
 */
public class ComposantMapper {

	/**
	 * Constructeur
	 */
	private ComposantMapper() {
		// Empty constructeur
	}

	/**
	 * Convertit l'entity en dto
	 * 
	 * @param profil
	 * @return
	 */
	public static ComposantDTO entityToDTO(final Composant composant) {
		final ComposantDTO composantDTO = new ComposantDTO();
		composantDTO.setId(composant.getId());
		composantDTO.setLibelle(composant.getLibelle());
		composantDTO.setNomAction(composant.getNomAction());
		composantDTO.setCategorieComposantDTO(CategorieComposantMapper.entityToDTO(composant
				.getCategorieComposant()));
		return composantDTO;
	}

	/**
	 * Converit droit en composant DTO
	 * 
	 * @param droit
	 * @return
	 */
	public static ComposantDTO entityDroitToDTO(final Droit droit) {
		return entityToDTO(droit.getComposant());
	}

	/**
	 * @param droitSet
	 * @return
	 */
	public static List<ComposantDTO> entityDroitToDTOList(final Set<Droit> droitSet) {
		final List<ComposantDTO> composantDTOList = new ArrayList<ComposantDTO>();
		if (!CollectionUtils.isEmpty(droitSet)) {
			for (final Droit droit : droitSet) {
				composantDTOList.add(entityDroitToDTO(droit));
			}
		}
		return composantDTOList;
	}

	/**
	 * Convertit l'entity en DTO Liste
	 * 
	 * @param composantList
	 * @return
	 */
	public static List<ComposantDTO> entityToDTOList(final List<Composant> composantList) {
		final List<ComposantDTO> composantDTOList = new ArrayList<ComposantDTO>();
		if (!CollectionUtils.isEmpty(composantList)) {
			for (final Composant composant : composantList) {
				composantDTOList.add(entityToDTO(composant));
			}
		}
		return composantDTOList;
	}

	/**
	 * Creer les droit à partir des composants
	 * 
	 * @param profilDTO
	 * @param profil
	 * @return
	 */
	public static Set<Droit> composantDTOToDroitSet(final List<ComposantDTO> listeComposantDTO,
			final Profil profil) {
		final Set<Droit> droitSet = new HashSet<Droit>();
		if (!CollectionUtils.isEmpty(listeComposantDTO)) {
			for (final ComposantDTO composantDTO : listeComposantDTO) {
				final Composant composant = new Composant();
				final Droit droit = new Droit();
				composant.setId(composantDTO.getId());
				droit.setComposant(composant);
				droit.setProfil(profil);
				droitSet.add(droit);
			}
		}
		return droitSet;
	}
}
